home *** CD-ROM | disk | FTP | other *** search
Wrap
# Source Generated with Decompyle++ # File: in.pyc (Python 2.6) import time import pprint import bz2 import logging import posixpath from gettext import gettext as _ from socket import gethostname from StringIO import StringIO from checkbox.lib.conversion import string_to_type from checkbox.lib.log import format_delta from checkbox.lib.transport import HTTPTransport from checkbox.properties import Int, String from checkbox.plugin import Plugin class LaunchpadExchange(Plugin): timeout = Int(default = 120) transport_url = String(default = 'https://launchpad.net/+hwdb/+submit') def register(self, manager): super(LaunchpadExchange, self).register(manager) self._headers = { } self._form = { 'field.private': False, 'field.contactable': False, 'field.live_cd': False, 'field.format': u'VERSION_1', 'field.actions.upload': u'Upload' } for rt, rh in [ ('report-architecture', self.report_architecture), ('report-client', self.report_client), ('report-datetime', self.report_datetime), ('report-distribution', self.report_distribution), ('report-email', self.report_email), ('report-submission_id', self.report_submission_id), ('report-system_id', self.report_system_id), ('exchange-report', self.exchange_report), ('exchange', self.exchange)]: self._manager.reactor.call_on(rt, rh) def report_architecture(self, message): self._form['field.architecture'] = message def report_client(self, message): user_agent = '%s/%s' % (message['name'], message['version']) self._headers['User-Agent'] = user_agent def report_datetime(self, message): self._form['field.date_created'] = message def report_distribution(self, message): self._form['field.distribution'] = message.distributor_id self._form['field.distroseries'] = message.release def report_email(self, message): self._form['field.emailaddress'] = message def report_submission_id(self, message): self._form['field.submission_key'] = message def report_system_id(self, message): self._form['field.system'] = message def exchange_report(self, message): self._report = message def exchange(self): form = { } for field, value in self._form.items(): form[field] = str(value).encode('UTF-8') payload = open(self._report, 'r').read() compressed_payload = bz2.compress(payload) file = StringIO(compressed_payload) file.name = '%s.xml.bz2' % str(gethostname()) file.size = len(compressed_payload) form['field.submission_data'] = file if logging.getLogger().getEffectiveLevel() <= logging.DEBUG: logging.debug('Uncompressed payload length: %d', len(payload)) transport = HTTPTransport(self.transport_url) start_time = time.time() response = transport.exchange(form, self._headers, timeout = string_to_type(self.timeout)) end_time = time.time() if not response: self._manager.reactor.fire('exchange-error', _('Failed to contact server. Please try\nagain or upload the following file name:\n%s\n\ndirectly to the system database:\nhttps://launchpad.net/+hwdb/+submit') % posixpath.abspath(self._report)) return None if response.status != 200: self._manager.reactor.fire('exchange-error', _('Failed to upload to server,\nplease try again later.')) return None header = response.getheader('x-launchpad-hwdb-submission') if not header: self._manager.reactor.fire('exchange-error', _('Information not posted to Launchpad.')) elif 'Error' in header: self._manager.reactor.fire('exchange-error', header) logging.error(header) else: text = response.read() logging.info('Sent %d bytes and received %d bytes in %s.', file.size, len(text), format_delta(end_time - start_time)) factory = LaunchpadExchange